//
//  NSString+Tools.h
//  MiaoPai
//
//  Created by jiaxuzhou on 2017/6/10.
//  Copyright © 2017年 Jeakin. All rights reserved.
//
//


#import <Foundation/Foundation.h>
#import "NSObject+Tools.h"


#pragma mark - 数据保护

/// 字符串保护
/// 是否为NSString类型（单独处理NSMutableString）
#define MPT_Str_Class(str) MPT_Object_Is_Class(str,[NSString class])


/// 是否有效，不为空，且是NSString类型，且count值大于0（单独处理NSMutableString）
#define MPT_Str_Is_Valid(str) ((MPT_Object_Not_Null(str)) && (MPT_Str_Class(str)) && ([str length] > 0))
/// 不考虑字符串长度
#define MPT_Str_Is_Valid_ExceptEmpty(str) ((MPT_Object_Not_Null(str)) && (MPT_Str_Class(str)))


/// 是否无效，或为空，或不是NSString类型，或count值小于等于0（单独处理NSMutableString）
#define MPT_Str_Not_Valid(str) ((MPT_Object_Is_Null(str)) || (!MPT_Str_Class(str)) || ([str length] <= 0))
/// 不考虑字符串长度
#define MPT_Str_Not_Valid_ExceptEmpty(str) ((MPT_Object_Is_Null(str)) || (!MPT_Str_Class(str)))

/// nil保护，当为nil时，返回@""，避免一些Crash
#define MPT_Str_Protect(str) (MPT_Str_Is_Valid(str) ? (str) : (@""))


@interface NSString (Tools)


#pragma mark - ************************************ 加密相关 ****************************************

/**
 -方法 MD5加密（小写）
 @return 加密结果
 */
- (NSString *)mp_MD5Lower16;

/**
 -方法 MD5加密（大写）
 @return 加密结果
 */
- (NSString *)mp_MD5Upper16;

/**
 +方法 MD5加密（小写）
 @param originalStr 加密前的data
 @return 加密结果
 */
+ (NSString *)mp_MD5Lower16:(NSString *)originalStr;

/**
 +方法 MD5加密（大写）
 @param originalStr 加密前的data
 @return 加密结果
 */
+ (NSString *)mp_MD5Upper16:(NSString *)originalStr;

/**
 -方法 AES128位+哈希加密
 
 @param aKey 加密秘要
 @return 加密后的字符串
 */
- (NSString *)mp_AES128HexEncryptPassword:(NSString *)aKey;

/**
 -方法 AES128位+哈希解密
 
 @param aKey 加密秘要
 @return 解密后的字符串
 */
- (NSString *)mp_AES128HexDecryptPassword:(NSString *)aKey;

/**
 +方法 AES128位+哈希加密
 
 @param aStr 加密前的data
 @param aKey 加密秘要
 @return 加密后的字符串
 */
+ (NSString *)mp_AES128HexEncrypt:(NSString *)aStr password:(NSString *)aKey;

/**
 +方法 AES128位+哈希解密
 
 @param aStr 解密前的data
 @param aKey 加密秘要
 @return 解密后的字符串
 */
+ (NSString *)mp_AES128HexDecrypt:(NSString *)aStr password:(NSString *)aKey;

/**
 -方法 哈希加密
 
 @return 加密后的值
 */
- (NSString *)mp_HEXEncrypt;

/**
 -方法 哈希解密
 
 @return 解密后的值
 */
- (NSData *)mp_HEXDecrypt;

/**
 +方法 哈希加密
 
 @param aStr 加密之前的data
 @return 加密后的值
 */
+ (NSString *)mp_HEXEncrypt:(NSString *)aStr;

/**
 +方法 哈希解密
 
 @param aStr 解密之前的data
 @return 解密后的值
 */
+ (NSData *)mp_HEXDecrypt:(NSString *)aStr;

/**
 -方法 base64加密
 
 @return 加密后的值
 */
- (NSString *)mp_Base64Encrypt;

/**
 -方法 base64解密
 
 @return 解密后的值
 */
- (NSData *)mp_Base64Decrypt;

/**
 +方法 base64加密
 
 @param aData 加密之前的值
 @return 加密之后的值
 */
+ (NSString *)mp_Base64Encrypt:(NSData *)aData;

/**
 +方法 base64解密
 
 @param aData 解密前的值
 @return 解密后的值
 */
+ (NSData *)mp_Base64Decrypt:(NSData *)aData;


#pragma mark - ************************************ 用户信息和url相关 ****************************************

/**
 *  字符串字数
 *  中文为 1 位，英文为 0.5 个
 *
 *  @return 字符串字数
 */
- (NSInteger)YXStringCount;
- (CGFloat)YXStringFloatCount;
- (NSString *)interceptionByGBK:(int)length;

- (BOOL)isValidNickname;

- (BOOL)isValiddDesc;

- (BOOL)isPhoneNumber;

- (BOOL)isEmail;

- (BOOL)isPassword;

- (BOOL)isMobileNumber;

- (id)JSONValue;

- (NSString *)getChineseCaptialChar;

- (NSString *)MD5String;

- (NSString *)second2String;

- (NSString *)urlEncode;
- (NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;

- (NSString *)urlDecode;
- (NSString *)urlDecodeUsingEncoding:(NSStringEncoding)encoding;

+ (NSString *)MPTIdentifierString;

- (NSString *)firstPYString;
- (NSString *)removeSpaceAndNewline;

+ (NSString *)device_uuid;

- (NSString *)URLStringByAppendingQueryString:(NSString *)queryString;


@end
